package com.itheima.service.mongo.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.itheima.domain.mongo.Friend;
import com.itheima.domain.mongo.RecommendUser;
import com.itheima.domain.mongo.UserLike;
import com.itheima.domain.mongo.UserNoLike;
import com.itheima.service.db.CardService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@DubboService
public class cardServiceImpl implements CardService {

    @Autowired
    private MongoTemplate mongoTemplate;


    /**
     * 卡片展示
     *
     * @param userId
     */
    @Override
    public List<RecommendUser> findByRecommendUserCard(Long userId) {

        //查询RecommendUser表推荐给我的用户
        List<RecommendUser> recommendUserList = mongoTemplate.find(new Query(Criteria.where("toUserId").is(userId)), RecommendUser.class);

        //查询UserLike表我已经喜欢的人 和UserNoLike表我不喜欢的人
        Query query = new Query(Criteria.where("userId").is(userId));
        List<UserLike> userLikes = mongoTemplate.find(query, UserLike.class);


        //如果推荐给我的用户中有我喜欢的人 遍历我已经喜欢人 然后删除RecommendUser表中推荐
        if (CollUtil.isNotEmpty(userLikes)) {
            userLikes.forEach(userLike -> {
                //删除推荐给我的并且已经喜欢的人
                mongoTemplate.remove(new Query(Criteria.where("userId").is(userLike.getLikeUserId())
                        .and("toUserId").is(userId)),RecommendUser.class);

            });
        }

        List<UserNoLike> userNoLikes = mongoTemplate.find(query, UserNoLike.class);
        //如果推荐给我的用户中有我不喜欢的人 遍历我不喜欢人 然后删除RecommendUser表中推荐
        if (CollUtil.isNotEmpty(userNoLikes)) {
            userNoLikes.forEach(userNoLike -> {
                //删除推荐给我的并且已经不喜欢的人
                mongoTemplate.remove(new Query(Criteria.where("userId").is(userNoLike.getLikeUserId())
                        .and("toUserId").is(userId)),RecommendUser.class);

            });
        }

        return recommendUserList;
    }

    /**
     * 卡牌_不喜欢
     *
     * @param userId
     * @param noLikeId
     */
    @Override
    public void noLikeCard(Long userId, Integer noLikeId) {
        //设置删除的条件
        Query query = new Query(Criteria.where("userId").is(noLikeId.longValue())
                .and("toUserId").is(userId));
        //把不喜欢的人从推荐表删除
        mongoTemplate.remove(query, RecommendUser.class);

        //把bu喜欢的人封装到Uses NoLike表中
        UserNoLike like = new UserNoLike();
        like.setLikeUserId(noLikeId.longValue());
        like.setUserId(userId);
        like.setCreated(System.currentTimeMillis());
        mongoTemplate.save(like);
    }

    /**
     * 卡牌_喜欢
     * @param userId
     * @param likeId
     */
    @Override
    public void LikeCard(Long userId, Integer likeId) {
        //设置删除的条件
        Query query1 = new Query(Criteria.where("userId").is(likeId.longValue())
                .and("toUserId").is(userId));
        //把喜欢的人从推荐表删除
        mongoTemplate.remove(query1, RecommendUser.class);

        //把喜欢的人封装到User Like表中
        UserLike like = new UserLike();
        like.setLikeUserId(likeId.longValue());
        like.setUserId(userId);
        like.setCreated(System.currentTimeMillis());
        mongoTemplate.save(like);

        //判断我喜欢的人 是否也喜欢我 如果喜欢就成为好友
        Query query2 = new Query(Criteria.where("userId").is(likeId));
        List<UserLike> userLikes = mongoTemplate.find(query2, UserLike.class);
        //判断userLikes是否为空
        if (CollUtil.isNotEmpty(userLikes)) {
            //遍历userLikes
            userLikes.forEach(u -> {
                //判断我喜欢的人有没有喜欢我
                if (u.getLikeUserId() == userId) {
                    //如果有自动加好友
                    //填充我的好友表
                    Friend friend = new Friend();
                    friend.setFriendId(likeId.longValue()); //好友id
                    friend.setUserId(userId); //我的id
                    friend.setCreated(System.currentTimeMillis()); //时间
                    mongoTemplate.save(friend);
                    //填充他的好友表
                    Friend friendHY = new Friend();
                    friendHY.setFriendId(userId);
                    friendHY.setUserId(likeId.longValue());
                    friendHY.setCreated(System.currentTimeMillis());
                    mongoTemplate.save(friendHY);

                }
            });
        }
    }
}
